Microcode05 - RSP SW 2.0G - GE/PD
superficially similiar to mario's, but tri4 and combiner differences
00	rsp noop
01	rsp_uc05_matrix
02	rsp_reserved0
03	rsp_uc05_movemem
04	rsp_uc05_vertex
05	rsp_reserved1
06	rsp_uc05_displaylist
07	rsp_reserved2
08	rsp_reserved3
09	rsp_uc05_sprite2d

AF	rsp_uc05_load_ucode
B0	rsp_uc05_branch_z
B1	rsp_uc05_tri4
B2	rsp_uc05_rdphalf_cont
B3	rsp_uc05_rdphalf_2
B4	rsp_uc05_rdphalf_1
B5	rsp_uc05_line3d
B6	rsp_uc05_cleargeometrymode
B7	rsp_uc05_setgeometrymode
B8	rsp_uc05_enddl
B9	rsp_uc05_setothermode_l
BA	rsp_uc05_setothermode_h
BB	rsp_uc05_texture	/	rdp_texture
BC	rsp_uc05_moveword
BD	rsp_uc05_popmatrix
BE	rsp_uc05_culldl
BF	rsp_uc05_tri1

C0	rdp_noop
C8	rdp_trifill
C9	rdp_trifillz
CA	rdp_tritxtr
CB	rdp_tritxtrz
CC	rdp_trishade
CD	rdp_trishadez
CE	rdp_trishadetxtr
CF	rdp_trishadetxtrz
E4	rdp_texrect
E5	rdp_texrectflip
E6	rdp_loadsync
E7	rdp_pipesync
E8	rdp_tilesync
E9	rdp_fullsync
EA	rdp_setkeygb
EB	rdp_setkeyr
EC	rdp_setconvert
ED	rdp_setscissor
EE	rdp_setprimdepth
EF	rdp_setothermode
F0	rdp_loadtlut
F2	rdp_settilesize
F3	rdp_loadblock
F4	rdp_loadtile
F5	rdp_settile
F6	rdp_fillrect
F7	rdp_setfillcolor
F8	rdp_setfogcolor
F9	rdp_setblendcolor
FA	rdp_setprimcolor
FB	rdp_setenvcolor
FC	rdp_setcombine
FD	rdp_settextureimage
FE	rdp_setdepthimage
FF	rdp_setcolorimage

--------------

01	rsp_uc05_matrix
a 4x4 veiwing matrix. It can be multiplied and pushed to the stack.

upper word
xxx0xxxx	modelview	mul	nopush
xxx1xxxx	projection	mul	nopush
xxx2xxxx	modelview	load	nopush
xxx3xxxx	projection	load	nopush
xxx4xxxx	modelview	mul	push
xxx5xxxx	projection	mul	push
xxx6xxxx	modelview	load	push
xxx7xxxx	projection	load	push

lower word
address or offset in file

-

03	rsp_uc05_movemem

upper word
xx80xxxx	move viewport
xx82xxxx	look at y
xx84xxxx	look at x
xx86xxxx	light [0]
xx88xxxx	light [1]
xx8Axxxx	light [2]
xx8Cxxxx	light [3]
xx8Exxxx	light [4]
xx90xxxx	light [5]
xx92xxxx	light [6]
xx94xxxx	light [7]
xx96xxxx	texture at T
xx98xxxx	matrix [0]
xx9Axxxx	matrix [1]
xx9Cxxxx	matrix [2]
xx9Exxxx	matrix [3]

lower word
0f000000	segment (like 05 used for offsets)
00ffffff	address or offset in file

-

04	rsp_uc05_vertex

upper word
00F00000	number of points
000FFFFF	number of bytes to grab

lower word
0f000000	segment
00ffffff	offset in point table

-

06	rsp_uc05_displaylist

upper word
xx00xxxx	push display list
xx01xxxx	branch to display list

lower word
0f000000	segment (like 05 used for offsets)
00ffffff	address or offset in file

--------------------------
07	rsp_color
This PD-specific command declares offset to RGBA data

upper word
00FF0000	number of bytes to grab, -4
0000FFFF	number of bytes to grab

lower word
0f000000	segment
00ffffff	address or offset in file

--------------------------
AF	rsp_load_ucode
Loads ucode
Preceeded by rdp_half_1

upper word
0000FFFF	size of data section, -1

lower word
FFFFFFFF	start text section


--------------------------
B0	rsp_branch_z
Branch if the z position of model is <= screen
Preceeded by rdp_half_1

upper word
00FFF000	vertex*5, specificly the z value
00000FFE	vertex, specificly the z value

lower word
in perspective mode:
(1-(near plane)/(screen depth)) / (1-(near plane)/(far plane)) * (zmax - zmin)

in orthographic mode:
((screen depth)-(near plane))/((far plane)-(near plane)) * (zmax - zmin)

-or you can use the raw screen depth value

--------------------------
B1	rsp_tri4
Draws up to four triangles at a time.
Expects values from 0-F, corresponding with # points declared by vertex command.
Triangles with all points set to 0 are not drawn.

upper word
0000F000	fourth triangle point 3
00000F00	third triangle point 3
000000F0	second triangle point 3
0000000F	first triangle point 3

lower word
f0000000	fourth triangle point 2
0f000000	fourth triangle point 1
00f00000	third triangle point 2
000f0000	third triangle point 1
0000f000	second triangle point 2
00000f00	second triangle point 1
000000f0	first triangle point 2
0000000f	first triangle point 1

--------------------------
B4	rsp_uc05_rdphalf_1
Preceeds "branch on z" and "load ucode" commands

upper word
00000000
lower word
FFFFFFFF	display list to branch to for "branch on z"
FFFFFFFF	start of data section for "load ucode"

--------------------------
B5	rsp_line3d
draws a 3d line using two vectors (essentially points).  Kinda like 3d functions.
Possibly used for gunfire, but highly unlikely.
width works in half-pixels, and the base value is 1.5

lower word
00FE0000	vector 0
0000FE00	vector 1
000000FF	width (.5width + 1.5)

--------------------------
B6	rsp_uc05_cleargeometrymode

lower word
0x00000001	z buffer
0x00000002	texture
0x00000004	shade
0x00000200	shade smooth
0x00001000	cull front
0x00002000	cull back
0x00010000	fog
0x00020000	lighting
0x00040000	texture gen
0x00080000	texture gen linear
0x00100000	lod
0x00800000	clipping	(Perfect Dark only)

-

B7	rsp_uc05_setgeometrymode
when following bitflags set, attributes applied to surfaces

lower word
0x00000000	clipping
0x00000001	depth buffer
0x00000002	texture enable
0x00000004	shade (enable Gourand interpretation - if not set, use setprim/envcolor to make triangles visible)
0x000000F8	+only used in setup seemingly
0x00000200	shade smooth (uses vertex colors - if not set, first vertex defines the surface's color)
0x00001000	cull front
0x00002000	cull back
0x00010000	fog
0x00020000	lighting
0x00040000	texture gen
0x00080000	texture gen linear
0x00100000	lod (doesn't seem like many games implement this...)
0x00800000	clipping	(Perfect Dark only)

---------------------------
B8	rsp_enddl
Marks the end of a display list.
If the current list was called by an 06 command, returns from branch.  
Otherwise, processing returns to the calling function.

No options

---------------------------

B9	rsp_uc05_setothermode_l
upper word
0000FF00	shift	(PD only: 32-shift-length)
	here are shift values for each of the various segments (hex):
	0	alpha compare
	2	depth source select
	3	render mode
	10	blender
000000FF	length	(PD only: length-1)
	here are lengths for each of the various segments (hex):
	1	depth source
	2	alpha compare
	1D	render mode (encompases render mode, converge ST, depth mode, and blender from below)
	10	blender

lower word
alpha compare	0x00000000	none
		0x00000001	threshold
		0x00000003	dither
depth source	0x00000000	pixel
		0x00000004	primitive
render mode	0x00000008	antialias enable
		0x00000010	depth compare
		0x00000020	depth update
		0x00000040	image read
		0x00000080	clear on converge
-converge ST	0x00000000	converge delta-ST clamp
		0x00000100	converge delta-ST wrap
		0x00000200	converge delta-ST full
		0x00000300	converge delta-ST save
-depthmode	0x00000000	depth opa
		0x00000400	depth interpolate
		0x00000800	depth exclusive
		0x00000C00	depth decrement
		0x00001000	converge x alpha
		0x00002000	alpha converge selection
		0x00004000	force blender
		0x00008000	texture edge	(0 in Perfect Dark)
-blender	0x00010000	blend 1 machine
		0x00020000	blend alpha memory
		0x00040000	blend 1
		0x00080000	blend 0
		0x00100000	blend color in
		0x00200000	blend color memory
		0x00400000	blend color blender
		0x00800000	blend color fog
		0x01000000	blend alpha in
		0x02000000	blend alpha fog
		0x04000000	blend alpha shade
		0x08000000	blend 0
		0x10000000	blend 1 machine
		0x20000000	blend alpha memory
		0x40000000	blend 1
		0x80000000	blend 0

-

BA	rsp_uc05_setothermode_h
upper word:
0000FF00	shift	(PD only: 32-shift-length)
	These are the bit-shift values for each of the various segments:
	0	blend mask
	4	alpha dither
	6	RGB dither
	8	combine key
	9	texture convertion
	12	texture filter
	14	texture LUT
	16	texture LOD
	17	texture detail
	19	texture perspective
	20	cycle type
	22	color dither
	23	pipeline
000000FF	length	(PD only: length-1)
	here are lengths for each of the various segments:
	4	blend mask
	2	alpha dither
	2	RGB dither
	1	combine key
	3	texture convertion
	2	texture filter
	2	texture LUT
	1	texture LOD
	2	texture detail
	1	texture persepective
	2	cycle type
	1	color dither
	1	pipeline mode
	
	can also signify type of image data
		0	4bit
		1	8bit
		2	16bit
		3	32bit

lower word:
blendmask	0x0000000F
alpha dither	0x00000000	pattern
		0x00000010	no pattern
		0x00000020	noise
		0x00000030	disable
rgb dither	0x00000000	magic square
		0x00000040	bayer
		0x00000080	noise	(enable in Perfect Dark)
		0x000000C0	disable	(Perfect Dark Only!)
combine key	0x00000000	none
		0x00000100	key
texture convert	0x00000000	convert
		0x00000A00	filter convert
		0x00000C00	filter
texture filter	0x00000000	point
		0x00002000	bi-level interpretation
		0x00003000	average
texture lut	0x00000000	none
		0x00008000	rgba16
		0x0000C000	ia16
texture lod	0x00000000	tile
		0x00010000	lod
texture detail	0x00000000	clamp
		0x00020000	sharpen
		0x00040000	detail
texture persp	0x00000000	none
		0x00080000	perspective
cycle type	0x00000000	1cycle
		0x00100000	2cycle
		0x00200000	copy
		0x00300000	fill
color dither	0x00000000	disable		(note: Perfect Dark does not use this flag!)
		0x00400000	enable
pipeline mode	0x00000000	n primitive
		0x00800000	1 primitive

-

BB	rsp_uc05_texture
Needs to be set on to texture following triangles, ie: BB002801 FFFFFFFF 
Can also map one of 6 pre-loaded imagemaps to triangles.
s and t refer to the two mapping pins included with each point struct.
Ordinarily don't set these masks, unless using preloaded image or surfaces do not declare ST.

upper word
00FF0000	bowtie of some kind.  +4 chops one scanline from surface
00003800	level? seems like format, most of the time
00000700	tile t0
000000FF	on(1) or off(0)

lower word
FFFF0000	s
0000FFFF	t

-

BC	rsp_uc05_moveword
by default moves entire matrix.  Otherwise, this dictates what stuff is being fiddled with

upper word
types	00000000	matrix
	00020000	#lights
	00040000	clip
	00060000	segment
	00080000	fog
	000A0000	light color
	000C0000	point
	000E0000	perspective normal
offsets	00000000	integer matrix
(per	00000080	floating-point matrix
type)	00000000	matrix XX XY
	00000010	matrix XZ XW
	00000020	matrix YX YY
	00000030	matrix YZ YW
	00000040	matrix ZX ZY
	00000050	matrix ZZ ZW
	00000060	matrix WX WY
	00000070	matrix WZ WW
	00000000	light vectors or fog
	00000010	clip -x
	00000030	clip -y
	00000050	clip +x
	00000070	clip +y
	0000003C	segment 0-F
	00000000	light a
	00000010	light b
	00000380	light 0-8
	00000040	point RGBA
	00000050	point ST
	00000060	point XY screen
	00000070	point Z screen

lower word
if fog/light not selected, set address
	0x0f000000	segment
	0x00ffffff	address or offset in file
if fog, fog depth values (2 16bit integers)
if light color, rgb+fog (ie. FF000001 for red fog, active cloud layer)

---------------------------
BD	rsp_popmatrix	adrs,len,idx,ofs
upper word
00FF0000	Perfect Dark: offset, typically 0
0000FF00	Perfect Dark: size of block, -1 (0x3F)
000000FF	Perfect Dark: 2

lower word
FFFFFFFF	matrix number to pop or address of matrix (num*64)

---------------------------
BE	rsp_culldl
upper word
0000FFFE	start

lower word
0000FFFE	end

---------------------------
BF	rsp_tri1
Create one triangle.
Divide each value by 10 (0xA) to return the point number in current list.  Note the point order is opposite that for the tri4 command.
Requires a vertex list offset is set by rsp_vertex command.
ie.	00	point 0
	0A	point 1
	...
	8C	point 14
	96	point 15

lower word
00ff0000	point 1
0000ff00	point 2
000000ff	point 3

-----------
E4	rdp_texrect
Draws text in rectangles, especially fonts.
Virtually all 2D objects are mapped with this type unless sprite microcode in use.
64bit command.  First 32 bits set size of tile, second 32 bits image alignment

upper word
00FFF000	upper left x
00000FFF	upper left y

lower word
07000000	tile
00FFF000	lower right x
00000FFF	lower right y

command 2
upper word
FFFF0000	upper left s
0000FFFF	upper left t

lower word
FFFF0000	change in s per change in x (dsdx, as in delta-s delta-x)
0000FFFF	dtdy
-----------
E5	rdp_texrectflip
Suspiciously similiar to E4: rdp_texrect

upper word
00FFF000	upper left x
00000FFF	upper left y

lower word
07000000	tile
00FFF000	lower right x
00000FFF	lower right y

command 2
upper word
FFFF0000	upper left s
0000FFFF	upper left t

lower word
FFFF0000	change in s per change in x (dsdx, as in delta-s delta-x)
0000FFFF	dtdy

--------------------------
E6	rdp_loadsync
Called after any data request to allow processor time to load data.

No options

--------------------------
E7	rdp_pipesync
The pipe is used as a generic term for peripheral interface or co-processor activity.
Waits for data to be loaded from ROM or RAM, or waits for co-processor to clear.
Display lists will almost always start with this command to ensure all previous display lists are completely executed.  

No options

--------------------------
E8	rdp_tilesync
Called after requesting tile data load.  Waits for processor activity to end.

No options

--------------------------
E9	rdp_fullsync
Combined effect of all syncs.  Not common, actually.

No options

--------------------------
EA	rdp_setkeygb
Sets green + blue key components; typically used with EB: rdp_setkeyr below

upper word
00FFF000	Water:	Green
00000FFF	Water:	Blue

lower word
FF000000	Cloud:	Green
00FF0000	Sky:	Green
0000FF00	Cloud:	Blue
000000FF	Sky:	Blue

--------------------------
EB	rdp_setkeyr
Sets red key component; typically used with EA: rdp_setkeygb above

upper word

lower word
0FFF0000	Water:	Red
0000FF00	Cloud:	Red
000000FF	Sky:	Red

--------------------------
EC	rdp_setconvert
All values are 9 bits; note that K2 spans both upper and lower word

upper word
003FE000	k0
00001FF0	k1
0000000F	k2 (upper)

lower word
F8000000	k2 (lower)
07FC0000	k3
0003FE00	k4
000001FF	k5

--------------------------
ED	rdp_setscissor

upper word
00FFF000	upper left x
00000FFF	upper left y

lower word
02000000	interlace
01000000	odd when interlaced
00FFF000	lower right x
00000FFF	lower right y

--------------------------
EE	rdp_setprimdepth

lower word
FFFF0000	depth
0000FFFF	change in depth

--------------------------
EF	rdp_setothermode
This is a crazy command.  It seems like it can take a whole slew of different arguments!

upper word
00FFFFFF	uses options from lower word of setothermode_h
	Pipeline Mode
	Cycle Type
	Texture Perspective
	Texture Detail
	Texture LOD
	Texture LUT
	Texture Filter
	Texture Convert
	Combine Key
	Color Dither
	Alpha Dither

lower word
FFFFFFFF		uses these options from lower word of setothermode_l
	alpha compare
	depth source
	render mode

--------------------------
F0	rdp_loadtlut
used to load palettes methinks; technically same format as the other load types
upper word
00FFF000	x0 (# entries)
00000FFF	y0

lower word
07000000	tile
00FFF000	count/x1 (size in bytes of palette)
00000FFF	palette start/y1

-

F2	rdp_settilesize
Sets size of image to be mapped.  Best if it actually matches the image's proportions...
Screwing up the mapping aspect can seriously damage the tile's appearance.
width=(lrs-uls)/4 + 1
height=(lrt-ult)/4 + 1

upper word
00FFF000	upper left s
00000FFF	upper left t

lower word
07000000	tile
00FFF000	lower right s
00000FFF	lower right t

-

F3	rdp_loadblock
used to load palette, but the code doesn't make much sense to me.

upper word
00FFF000	upper left s
00000FFF	upper left t

lower word
07000000	tile
00FFF000	lower right s
00000FFF	lower right t

-

F4	rdp_loadtile
width= (lrs-uls)/4 + 1
height= (lrt-ult)/4 + 1

upper word
00FFF000	upper-left S
00000FFF	upper-left T

lower word
07000000	tile
00FFF000	lower-right S
00000FFF	lower-right T

-

F5	rdp_settile
Applies image assuming given attibutes.
ie. F5600600 00FD8360 would load a 48x48 intensity+alpha image with 4bit pixel data and clamping the corners to the s/t given in the point data.
If palettes are loaded, you can set the palette bits to swap palettes at runtime.

upper word
format	0x00000000	rgba
	0x00200000	yuv
	0x00400000	ci
	0x00600000	ia
	0x00800000	i
size	0x00000000	4bit
	0x00080000	8bit
	0x00100000	16bit
	0x00180000	32bit
	0x0003FE00	line
	0x000001FF	tmem

lower word
07000000	tile
00F00000	palette
00080000	clamp t
00040000	mirror t
0003C000	mask t
00003C00	shift t
00000200	clamp s
00000100	mirror s
000000F0	mask s
0000000F	shift s

-

F6	rdp_fillrect
This is predominantly used when mapping text or "2D" objects
Color is set either by rdp_setblendcolor or rdp_setfillcolor
upper word
00FFC000	lower right x
00003000	lr x fraction
00000FFC	lower right y
00000003	lr y fraction

lower word
00FFC000	upper left x
00003000	ul x fraction
00000FFC	upper left y
00000003	ul y fraction

-

F7	rdp_setfillcolor
Sets the fill color.  Uses 16bit color

lower word
0000F800	red
000007C0	green
0000003E	blue
00000001	alpha

-

F8	rdp_setfogcolor
Sets fog color.  Uses 32bit color

upper word
0000FF00	minimum level
000000FF	level

lower word
rrggbbaa	red, green, blue, alpha components

-

F9	rdp_setblendcolor
Sets blend color.  Similar to rdp_setfillcolor, except 32bit color
Used by the hardware blended when option selected.

upper word
0000FF00	minimum level
000000FF	level

lower word
rrggbbaa	red, green, blue, alpha components

-

FA	rdp_setprimcolor
Sets the foreground color applied to generated triads.  
Blends into background (enviroment) color.
Many fonts, for instance, use I images blended color(prim)->alpha(env)

upper word
0000FF00	minimum level
000000FF	level

lower word
rrggbbaa	red, green, blue, alpha components

-

FB	rdp_setenvcolor
Sets background color applied to generated triads.
If a IA image is used, the black is the enviroment color, the white the primary color.

upper word
0000FF00	minimum level
000000FF	level

lower word
rrggbbaa

-

FC	rdp_setcombine
upper word
00F00000	a0
000F8000	c0
00007000	Aa0
00000E00	Ac0
000001E0	a1
0000001F	c1

lower word
F0000000	b0
0F000000	b1
00E00000	Aa1
001C0000	Ac1
00038000	d0
00007000	Ab0
00000E00	Ad0
000001C0	d1
00000038	Ab1
00000007	Ad1

0	combined
1	texel0
2	texel1
3	primitive
4	shade
5	enviroment
6	center
	scale
	1
7	combined alpha
8	texel0 alpha
9	texel1 alpha
A	primitive alpha
B	shade alpha
C	enviroment alpha
D	LOD fraction
E	primitive LOD fraction
F	K5
1F	0

alpha combiner:
0	combined
	LOD fraction
1	texel0
2	texel1
3	primitive
4	shade
5	enviroment
6	primitive LOD fraction
	1
7	0

These are some common pattern names.  They're probably from source, since they were gleaned from the internal names you see in some roms.  At the very least, the patterns are very consistant from game to game.
Note that there are two sets of these for each command: x0 and x1

internal names		a	c	Alphaa0	Alphac	b	d	Alphab	Alphad
PRIMITIVE		0	0	0	prim.	0	0	0	prim.
SHADE			0	0	0	shade	0	0	0	shade
SHADEDECALA		0	0	0	shade	0	0	0	texel0
DECALRGB		0	0	0	texel0	0	0	0	shade
DECALRGBA		0	0	0	texel0	0	0	0	texel0
ADDRGB			1	0	texel0	shade	0	0	0	shade
ADDRGBDECALA		1	0	texel0	shade	0	0	0	texel0
MODULATERGB
MODULATEI		texel0	0	shade	0	0	0	0	shade
MODULATERGBA
MODULATEIA		texel0	0	shade	0	texel0	0	shade	0
MODULATERGBDECALA
MODULATEIDECALA		texel0	0	shade	0	0	0	0	texel0
MODULATERGB_PRIM
MODULATEI_PRIM		texel0	0	prim.	0	0	0	0	prim.
MODULATERGBA_PRIM
MODULATEIA_PRIM		texel0	0	prim.	0	texel0	0	prim.	0
MODULATERGBDECALA_PRIM
MODULATEIDECALA_PRIM	texel0	0	prim.	0	0	0	0	texel0
REFLECTRGB		enviro.	0	texel0	shade	0	0	0	shade
REFLECTRGBDECALA	enviro.	0	texel0	shade	0	0	0	texel0
BLENDI			enviro.	shade	texel0	shade	0	0	0	shade
BLENDIA			enviro.	shade	texel0	shade	texel0	0	shade	0
BLENDIDECALA		enviro.	shade	texel0	shade	0	0	0	texel0
BLENDRGBA		texel0	shade	texel0A	shade	0	0	0	shade
BLENDRGBDECALA		texel0	shade	texel0A	shade	0	0	0	texel0
BLENDPE			prim.	enviro.	texel0	enviro.	texel0	0	shade	0
BLENDPEDECALA		prim.	enviro.	texel0	enviro.	0	0	0	texel0
BLENDPE_ALT		enviro.	prim.	texel0	prim.	texel0	0	shade	0
BLENDPEDECALA_ALT	enviro.	prim.	texel0	prim.	0	0	0	texel0
HILITERGB		prim.	shade	texel0	shade	0	0	0	shade
HILITERGBA		prim.	shade	texel0	shade	prim.	shade	texel0	shade
HILITERGBDECALA		prim.	shade	texel0	shade	0	0	0	texel0
TWOCOLORTEX		prim.	shade	texel0	shade	0	0	0	shade

-

FD	rdp_settextureimage
also used for camspy effect in PD, but that's just crazy and not included here
upper word
format	0x00000000	rgba
	0x00200000	yuv
	0x00400000	ci
	0x00600000	ia
	0x00800000	i
size	0x00000000	4bit
	0x00080000	8bit
	0x00100000	16bit
	0x00180000	32bit
	0x00000FFF	width-1

lower word
0f000000	segment (like 05 used for offsets)
00ffffff	address or offset in file

-

FE	rdp_setdepthimage
Not certain, but seems like the format and size always equal 0, and width always equals 1
Most likely only accepts a 1bit alpha table or something silly like that

upper word
format	0x00000000	rgba
	0x00200000	yuv
	0x00400000	ci
	0x00600000	ia
	0x00800000	i
size	0x00000000	4bit
	0x00080000	8bit
	0x00100000	16bit
	0x00180000	32bit
	0x00000FFF	width-1

lower word
0f000000	segment (like 05 used for offsets)
00ffffff	address or offset in file

-

FF	rdp_setcolorimage
format	0x00000000	rgba
	0x00200000	yuv
	0x00400000	ci
	0x00600000	ia
	0x00800000	i
size	0x00000000	4bit
	0x00080000	8bit
	0x00100000	16bit
	0x00180000	32bit
	0x00000FFF	width

lower word
0f000000	segment (like 05 used for offsets)
00ffffff	address or offset in file

